﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Interfejsi;
using MySql.Data.MySqlClient;
using OOAD_PROJEKAT;

namespace DAL
{
    partial class DAL
    {
        public class OZaposlenikDAO : IDaoCrud<OZaposlenik>
        {

            protected MySqlCommand c;

            public long create(OZaposlenik z)
            {
                try
                {

                    c = new MySqlCommand();
                    c.CommandText = "insert into zaposlenici values (@idZaposlenika, @username, @ime, @prezime, @jmbg, @password, @plata, @funkcija, @izbrisan, @idfilijale)";                                                                                            //                                           
                    c.Parameters.AddWithValue("@idZaposlenika", "");
                    c.Parameters.AddWithValue("@username", z.Username);
                    c.Parameters.AddWithValue("@ime", z.Ime);
                    c.Parameters.AddWithValue("@prezime", z.Prezime);
                    c.Parameters.AddWithValue("@jmbg", z.Jmbg);
                    c.Parameters.AddWithValue("@password", z.Password);
                    c.Parameters.AddWithValue("@plata", z.Plata);
                    c.Parameters.AddWithValue("@funkcija", z.Funkcija);
                    c.Parameters.AddWithValue("@izbrisan", 0);
                    c.Parameters.AddWithValue("@idfilijale", z.IdFilijale);
                    c.Connection = con;
                    c.ExecuteNonQuery();
                    return c.LastInsertedId;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<OZaposlenik> getAll()
            {
                try
                {
                    c = new MySqlCommand("select * from zaposlenici where izbrisan=0", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<OZaposlenik> zaposlenici = new List<OZaposlenik>();
                    while (r.Read())
                        zaposlenici.Add(new OZaposlenik(r.GetInt32("idZaposlenika"), r.GetString("username"), r.GetString("ime"), r.GetString("prezime"),
                                   r.GetString("jmbg"), r.GetString("password"), r.GetDouble("plata"), r.GetInt32("idFilijale"), r.GetString("funkcija")));

                    r.Close();
                    return zaposlenici;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }


            public OZaposlenik read(OZaposlenik z)
            {
                try
                {
                    string commandStr = "select * from zaposlenici where idZaposlenika=" + z.Id + " and izbrisan = 0";
                    c = new MySqlCommand(commandStr, con);
                    MySqlDataReader r = c.ExecuteReader();
                    OZaposlenik pr = null;
                    if (r.Read())
                        pr = new OZaposlenik(r.GetInt32("idZaposlenika"), r.GetString("username"), r.GetString("ime"), r.GetString("prezime"),
                                          r.GetString("jmbg"), r.GetString("password"),
                                          r.GetDouble("plata"), r.GetInt32("idFilijale"), r.GetString("funkcija"));
                    r.Close();
                    return pr;
                }

                catch (Exception e)
                {
                    throw e;
                }
            }

            public OZaposlenik update(OZaposlenik z)
            {
                try
                {
                    String commandStr = "update zaposlenici set ime = ?ime, ";
                    commandStr += "prezime = ?prezime, jmbg = ?jmbg, password = ?password, ";
                    commandStr += "plata = ?plata, funkcija = ?funkcija, idFilijale = ?idFilijale ";
                    commandStr += "where idZaposlenika=" + z.Id + " and izbrisan=0";

                    c = new MySqlCommand(commandStr, con);
                    c.Parameters.AddWithValue("?ime", z.Ime);
                    c.Parameters.AddWithValue("?prezime", z.Prezime);
                    c.Parameters.AddWithValue("?jmbg", z.Jmbg);
                    c.Parameters.AddWithValue("?password", z.Password);
                    c.Parameters.AddWithValue("?plata", z.Plata);
                    c.Parameters.AddWithValue("?funkcija", z.Funkcija);
                    c.Parameters.AddWithValue("?idFilijale", z.IdFilijale);

                    c.ExecuteNonQuery();
                    return read(z);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public void delete(OZaposlenik z)//brisanje postavlja kolonu "izbrisan" na 1
            {
                try
                {
                    string commandStr = "update zaposlenici set izbrisan=1 where idZaposlenika=" + z.Id;
                    c = new MySqlCommand(commandStr, con);
                    c.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    throw e;
                }

            }

            public OZaposlenik getById(int id)
            {
                try
                {
                    OZaposlenik z = new OZaposlenik(id, "", "", "", "", "", 0, 0, "");
                    return read(z);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<OZaposlenik> getByExample(string name, string value)
            {
                try
                {
                    c = new MySqlCommand("select * from zaposlenici where izbrisan=0 and " + name + "= '" + value + "'", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<OZaposlenik> zaposlenici = new List<OZaposlenik>();
                    while (r.Read())
                        zaposlenici.Add(new OZaposlenik(r.GetInt32("idZaposlenika"), r.GetString("username"), r.GetString("ime"), r.GetString("prezime"),
                                   r.GetString("jmbg"), r.GetString("password"), r.GetDouble("plata"), r.GetInt32("idFilijale"), r.GetString("funkcija")));

                    r.Close();
                    return zaposlenici;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            //kada zelimo dobiti sve zaposlenike zadane po parametru funkcija, koji zadovoljavaju name= value;
            public List<OZaposlenik> getByExampleSpec(string funkcija, string name, string value)
            {
                try
                {
                    c = new MySqlCommand("select * from zaposlenici where izbrisan=0 and " + name + "= '" + value + "', and funkcija='" + funkcija + "'", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<OZaposlenik> zaposlenici = new List<OZaposlenik>();
                    while (r.Read())
                        zaposlenici.Add(new OZaposlenik(r.GetInt32("idZaposlenika"), r.GetString("username"), r.GetString("ime"), r.GetString("prezime"),
                                   r.GetString("jmbg"), r.GetString("password"), r.GetDouble("plata"), r.GetInt32("idFilijale"), r.GetString("funkcija")));

                    r.Close();
                    return zaposlenici;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

        }
    }
}